using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._ModelTools._Iterator
{
    /// <summary>
    /// <para>Iterate Rasters</para>
    /// <para>Iterates over rasters in a workspace.</para>
    /// <para>迭代工作空间中的栅格。</para>
    /// </summary>    
    [DisplayName("Iterate Rasters")]
    public class IterateRasters : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public IterateRasters()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_workspace">
        /// <para>Workspace</para>
        /// <para>Workspace containing the rasters to iterate through.</para>
        /// <para>包含要迭代的栅格的工作空间。</para>
        /// </param>
        public IterateRasters(object _in_workspace)
        {
            this._in_workspace = _in_workspace;
        }
        public override string ToolboxName => "Model Tools";

        public override string ToolName => "Iterate Rasters";

        public override string CallName => "mb.IterateRasters";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_in_workspace, _wildcard, _raster_format.GetGPValue(), _recursive.GetGPValue(), _raster, _name];

        /// <summary>
        /// <para>Workspace</para>
        /// <para>Workspace containing the rasters to iterate through.</para>
        /// <para>包含要迭代的栅格的工作空间。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Workspace")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_workspace { get; set; }


        /// <summary>
        /// <para>Wildcard</para>
        /// <para>A combination of * and characters that help to limit the results. The asterisk is the same as saying ALL. If no wildcard is specified, all inputs will be returned. For example, it can be used to restrict Iteration over input names starting with a certain character or word (for example, A* or Ari* or Land* and so on).</para>
        /// <para>* 和字符的组合，有助于限制结果。星号与说 ALL 相同。如果未指定通配符，则将返回所有输入。例如，它可用于限制对以特定字符或单词开头的输入名称（例如，A* 或 Ari* 或 Land* 等）的迭代。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Wildcard")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _wildcard { get; set; } = null;


        /// <summary>
        /// <para>Raster Format</para>
        /// <para>Choose the extension of the raster format, such as ASC, BIL, BIP, BMP, and so on, or type in another extension.</para>
        /// <para>选择栅格格式的扩展名（如 ASC、BIL、BIP、BMP 等），或输入其他扩展名。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Raster Format")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _raster_format_value? _raster_format { get; set; } = null;

        public enum _raster_format_value
        {
            /// <summary>
            /// <para>ASC</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("ASC")]
            [GPEnumValue("ASC")]
            _ASC,

            /// <summary>
            /// <para>BIL</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("BIL")]
            [GPEnumValue("BIL")]
            _BIL,

            /// <summary>
            /// <para>BIP</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("BIP")]
            [GPEnumValue("BIP")]
            _BIP,

            /// <summary>
            /// <para>BMP</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("BMP")]
            [GPEnumValue("BMP")]
            _BMP,

            /// <summary>
            /// <para>BSQ</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("BSQ")]
            [GPEnumValue("BSQ")]
            _BSQ,

            /// <summary>
            /// <para>BSP</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("BSP")]
            [GPEnumValue("BSQ")]
            value5,

            /// <summary>
            /// <para>CIT</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("CIT")]
            [GPEnumValue("CIT")]
            _CIT,

            /// <summary>
            /// <para>COT</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("COT")]
            [GPEnumValue("COT")]
            _COT,

            /// <summary>
            /// <para>DT0</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("DT0")]
            [GPEnumValue("DT0")]
            _DT0,

            /// <summary>
            /// <para>DT1</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("DT1")]
            [GPEnumValue("DT1")]
            _DT1,

            /// <summary>
            /// <para>DT2</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("DT2")]
            [GPEnumValue("DT2")]
            _DT2,

            /// <summary>
            /// <para>ERS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("ERS")]
            [GPEnumValue("ERS")]
            _ERS,

            /// <summary>
            /// <para>GIF</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("GIF")]
            [GPEnumValue("GIF")]
            _GIF,

            /// <summary>
            /// <para>GIS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("GIS")]
            [GPEnumValue("GIS")]
            _GIS,

            /// <summary>
            /// <para>GRID</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("GRID")]
            [GPEnumValue("GRID")]
            _GRID,

            /// <summary>
            /// <para>HDF</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("HDF")]
            [GPEnumValue("HDF")]
            _HDF,

            /// <summary>
            /// <para>IMG</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("IMG")]
            [GPEnumValue("IMG")]
            _IMG,

            /// <summary>
            /// <para>JP2</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("JP2")]
            [GPEnumValue("JP2")]
            _JP2,

            /// <summary>
            /// <para>JPG</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("JPG")]
            [GPEnumValue("JPG")]
            _JPG,

            /// <summary>
            /// <para>LAN</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("LAN")]
            [GPEnumValue("LAN")]
            _LAN,

            /// <summary>
            /// <para>LGG</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("LGG")]
            [GPEnumValue("LGG")]
            _LGG,

            /// <summary>
            /// <para>NTF</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NTF")]
            [GPEnumValue("NTF")]
            _NTF,

            /// <summary>
            /// <para>PNG</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("PNG")]
            [GPEnumValue("PNG")]
            _PNG,

            /// <summary>
            /// <para>RAW</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("RAW")]
            [GPEnumValue("RAW")]
            _RAW,

            /// <summary>
            /// <para>RPF</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("RPF")]
            [GPEnumValue("RPT")]
            _RPT,

            /// <summary>
            /// <para>SID</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("SID")]
            [GPEnumValue("SID")]
            _SID,

            /// <summary>
            /// <para>TIF</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("TIF")]
            [GPEnumValue("TIF")]
            _TIF,

        }

        /// <summary>
        /// <para>Recursive</para>
        /// <para><xdoc>
        ///   <para>Determines if subfolders of the main folder will be iterated through recursively.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—Will iterate through all subfolders.</bullet_item><para/>
        ///     <bullet_item>Unchecked—Will not iterate through all subfolders.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>确定是否以递归方式循环访问主文件夹的子文件夹。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 （Checked） - 将循环访问所有子文件夹。</bullet_item><para/>
        ///     <bullet_item>未选中 - 不会循环访问所有子文件夹。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Recursive")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _recursive_value _recursive { get; set; } = _recursive_value._false;

        public enum _recursive_value
        {
            /// <summary>
            /// <para>RECURSIVE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("RECURSIVE")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NOT_RECURSIVE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NOT_RECURSIVE")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Raster</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Raster")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _raster { get; set; }


        /// <summary>
        /// <para>Name</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Name")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _name { get; set; }


        public IterateRasters SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}